<?php 
require_once '../functions.php';
xiu_get_current_user();
$search='';
$where= ' 1 = 1 ';//如果没有传入参数，where相当于没有
if (isset($_GET['category']) && $_GET['category'] !== 'all') {
  $where .= ' and posts.category_id = ' . $_GET['category'];
  //解决当分完类之后再点分页，会覆盖分类的问题，search加在分页的问号参数后面
  //引号里面不能有空格
  //放在url地址里面的要用&符号拼接
  $search .='&category='.$_GET['category'];

}
if(!empty($_GET['status']) && $_GET['status'] !== 'all'){
  $where .= " and posts.status = '{$_GET['status']}' ";
  $search .='&status='.$_GET['status'] ;

}
//分页计算
//通过url传过来的数据是字符串，要转int 
$page = empty($_GET['page']) ? 1 : (int)$_GET['page'];
if($page<1){
  //防止当page太小时，跳转到page=1，此时又没分类
  header("Location:posts.php?page=1.{$search}");
}
//处理分页页码
//获取数据的行数
//选行数的时候，只能按照聚合的语句进行选择，因为表里有很多不符合条件的内容
$total_count=(int)xiu_fetch_one("select 
  count(1) as num 
  from posts 
  inner join categories on posts.category_id=categories.id
  inner join users on posts.user_id=users.id
  where {$where};")['num'];
//计算总页数
$size = 10;//取几条
$total_page=(int)ceil($total_count/$size);
if($page>$total_page){
    header("Location:posts.php?page={$total_page}.$search");
}




$offset = ($page-1)*$size;//越过多少条
//减少数据库查询次数，只查询一次，之前查询很多次
$posts=xiu_fetch_all("
select 
posts.id,
posts.title,
users.nickname as users_nickname,
categories.name as categories_name,
posts.created,
posts.status
from posts 
inner join categories on posts.category_id=categories.id
inner join users on posts.user_id=users.id
where {$where}
order by posts.created desc
limit {$offset},{$size}");




/**
*这个函数传入的是字符串。返回的也是字符串
*目的是想把数据库里的英文状态转换成用户页面中的中文状态
**/

function cover_status($status){
    $dict= array(
        'drafted' => '草稿',
        'published'=> '已发布',
        'trashed'=>'回收站' 
        );
    return isset($dict[$status]) ? $dict[$status] : '未知状态';
}

//时间转换函数,把时间转换成指定的格式
function cover_data($created){
    //strtotime将参数转换为距离1970年0点0分0秒时的秒数,必须先转换成这个格式才能继续转换成指定的格式
    $timestamp=strtotime($created);
    //data如果传入第二个参数，代表把后面的参数喜欢换成按第一个参数的格式
    //r代表空格的意思，必须用\转义<br>才能起作用
    return date('Y年m月d日<b\r>H:i:s',$timestamp);
}

// //获取分类的名称
// function get_categories($id){
//   return xiu_fetch_one("select name from categories where id={$id};")['name'];
// }
// //根据作者号获取作者名字
// function get_auther($id){
//   //选出阿里的是一个数组，需要在指定字段
//   return xiu_fetch_one("select nickname from users where id={$id};")['nickname'];
// }





//计算页码开始
$visiables=5;//总宽度
$region=($visiables-1)/2;//左右有几个
$begin=$page-$region;//开始的页码
$end=$begin+$visiables;//结束页码+1
//begin和end必须要符合情况
if($begin<1){
  $begin=1;
  $end=$begin+$visiables;//由于$end由$begin决定，所以前面的变了后面的要在定义一遍
}
if($end > $total_page + 1){
  $end = $total_page+1;
  $begin=$end-$visiables;
  if($begin<1){
    $begin=1;
  }
}
$category=xiu_fetch_all("select * from categories;");
if($search){
  $can='page='.$page.$search;
}else{
  $can='page='.$page;
}
?>

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="utf-8">
  <title>Posts &laquo; Admin</title>
  <link rel="stylesheet" href="../static/assets/vendors/bootstrap/css/bootstrap.css">
  <link rel="stylesheet" href="../static/assets/vendors/font-awesome/css/font-awesome.css">
  <link rel="stylesheet" href="../static/assets/vendors/nprogress/nprogress.css">
  <link rel="stylesheet" href="../static/assets/css/admin.css">
  <script src="../static/assets/vendors/nprogress/nprogress.js"></script>
</head>
<body>
  <script>NProgress.start()</script>

  <div class="main">
    <?php include 'inc/navbar.php'; ?>

    <div class="container-fluid">
      <div class="page-title">
        <h1>所有文章</h1>
        <a href="post-add.html" class="btn btn-primary btn-xs">写文章</a>
      </div>
      <!-- 有错误信息时展示 -->
      <!-- <div class="alert alert-danger">
        <strong>错误！</strong>发生XXX错误
      </div> -->
      <div class="page-action">
        <!-- show when multiple checked -->
     


        <a class="btn btn-danger btn-sm" href="posts-delete.php?<?php echo isset($can)? $can:''; ?>" style="display:none"  id="all">批量删除</a>
        <form class="form-inline" action=" <?php echo $_SERVER['PHP_SELF']; ?>" method="get">
        <!-- 这个name相当于表单的name，可以被提交 -->
          <select name="category" class="form-control input-sm">
            <option value="all">所有分类</option>
            <?php foreach ($category as $item): ?>
              <!-- option的value属性内容可以当做问号参数提交,可以直接用get获取 -->
              <!-- 获取之后$_GET['category']可以等于 all 或者选项里某个具体的id -->
            <option value="<?php echo $item['id']; ?>"<?php echo isset($_GET['category']) && $_GET['category'] == $item['id'] ? 'selected' : '' ?>>
              <?php echo $item['name']; ?>
            </option>
            <?php endforeach ?>
          </select>
          <select name="status" class="form-control input-sm">
            <option value="all" <?php echo isset($_GET['status']) && $_GET['status'] == 'all' ? 'selected': ''; ?>>所有状态</option>
            <option value="drafted" <?php echo isset($_GET['status']) && $_GET['status'] == 'drafted' ? 'selected' : ''; ?>>草稿</option>
            <option value="published" <?php echo isset($_GET['status']) && $_GET['status'] == 'published' ? 'selected' : ''; ?>>已发布</option>
          </select>
          <button class="btn btn-default btn-sm">筛选</button>
        </form>
        <ul class="pagination pagination-sm pull-right">
          <li><a href="?page=<?php echo $page>1?$page-1:1; ?>"> <?php echo $page>1?'上一页':'……' ?></a></li>
           <?php for ($i = $begin; $i < $end; $i++): ?>
            <!-- 在分页的时候也要保证之前的分类有效 -->
              <li<?php echo $i === $page ? ' class="active"' : ''; ?>><a href="?page=<?php echo $i . $search; ?>"><?php echo $i; ?></a></li>
          <?php endfor ?>
          <li><a href="?page=<?php echo $page<$total_page?$page+1:$total_page; ?>"> <?php echo $page<$total_page?'下一页':'……'; ?></a></li>
        </ul>
      </div>
      <table class="table table-striped table-bordered table-hover">
        <thead>
          <tr>
            <th class="text-center" width="40"><input type="checkbox"></th>
            <th>标题</th>
            <th>作者</th>
            <th>分类</th>
            <th class="text-center">发表时间</th>
            <th class="text-center">状态</th>
            <th class="text-center" width="100">操作</th>
          </tr>
        </thead>
        <tbody>
         <?php foreach ($posts as $item): ?>
            <tr>
            <td class="text-center"><input type="checkbox" id="input" data-id=<?php echo $item['id']; ?>></td>
            <td><?php echo $item['title']; ?></td>
            <td><?php echo $item['users_nickname']; ?></td>
            <td><?php echo $item['categories_name']; ?></td>
            <td class="text-center"><?php echo cover_data($item['created']); ?></td>
            <td class="text-center"><?php echo cover_status($item['status']); ?></td>
            <td class="text-center">
              <a href="javascript:;" class="btn btn-default btn-xs">编辑</a>
              <a href="posts-delete.php?id=<?php echo $item['id'].'&page='.$page.$search; ?>" class="btn btn-danger btn-xs" >删除</a>   
            </td>
          </tr> 
         <?php endforeach ?>       
        </tbody>
      </table>
    </div>
  </div>
  
    
 



  <?php $current_page = 'posts'; ?>
  <?php include 'inc/sidebar.php'; ?>

  <script src="../static/assets/vendors/jquery/jquery.js"></script>
  <script src="../static/assets/vendors/bootstrap/js/bootstrap.js"></script>
  <script>
  $(function($){
    //先获取元素
    var $delete_btn=$("#delete_btn");
    var $input1=$("thead input");//只有一个
    var $input=$("tbody input");//有很多个
    var $all=$("#all");//删除按钮
    var allArr=[];
    var length=$input.length;
    var flag=true;

    $input.on('change',function(){
      var id=$(this).attr("data-id");
      if($(this).prop("checked")){
        //检查这个id在数组里没有，如果在就往下执行，不在加入数组
        allArr.includes(id) || allArr.push(id);
        var href=$all.attr("href");
        console.log(href);
        $all.attr("href",href+"&id="+allArr);
      }else{
        //如果这个id不在allArr里面了，获取这个id在数组里面的位置，在删掉它
        var id1=allArr.indexOf(id);
        allArr.splice(id1, 1);
        var href=$all.attr("href");
        console.log(href);
        $all.attr("href",href+"&id="+allArr);
      }
      allArr.length ? $all.fadeIn() : $all.fadeOut();
      allArr.length == length ? $input1.prop("checked",true) : $input1.prop("checked",false);
       
        
        //$all.prop("search",'id='+allArr);
      
      
    });
    $input1.on('change',function(){
      flag = $input1.prop("checked");
      //再次出发tbody 里面input的change 方法
      $input.prop("checked",flag).change();
    });


  });
  </script>
  <script>NProgress.done()</script>
</body>
</html>
